home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.validation;
-
- import com.extensibility.xml.SchemaIntf;
- import com.extensibility.xml.SchemaUtilities;
- import com.extensibility.xml.dt.DataType;
- import com.extensibility.xml.dt.DataTypeIntf;
- import com.extensibility.xml.dt.Facet;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import java.util.Vector;
-
- class DateTimeLeafValidator extends DataValidator {
- protected static int parseIntField(String var0, int var1, int var2) {
- int var3 = 0;
- if (var0.length() < var2) {
- return -1;
- } else {
- for(int var4 = var1; var4 < var2; ++var4) {
- if (!Character.isDigit(var0.charAt(var4))) {
- return -1;
- }
-
- var3 = var3 * 10 + Character.digit(var0.charAt(var4), 10);
- }
-
- return var3;
- }
- }
-
- protected String parseDate(SchemaIntf var1, DataType var2, String var3, GregorianCalendar var4) {
- int var5 = 0;
- int var6 = 0;
- int var7 = 0;
- int var8 = 0;
-
- try {
- String var9 = var1.getFlavorName();
- if (SchemaUtilities.flavorConvertsTo(var9) == SchemaIntf.SOX2_FLAVOR_NAME) {
- var6 = parseIntField(var3, 0, 4);
- var7 = parseIntField(var3, 4, 6);
- var8 = parseIntField(var3, 6, 8);
- if (var6 == -1 || var7 == -1 || var8 == -1 || var3.length() != 8) {
- String var18 = "invalid date";
- return var18;
- }
- } else if (var3.indexOf("-") != -1 && var3.indexOf("-") < 8 || SchemaUtilities.flavorConvertsTo(var9) != SchemaIntf.XDR_FLAVOR_NAME && SchemaUtilities.flavorConvertsTo(var9) != SchemaIntf.DTD_FLAVOR_NAME) {
- boolean var16 = false;
- if (var3.startsWith("-")) {
- var16 = true;
- ++var5;
- }
-
- int var11 = var3.indexOf("-", var5);
- if (var11 == -1) {
- if (SchemaUtilities.flavorConvertsTo(var9) == "xsd") {
- var6 = parseIntField(var3, var5, var3.length());
- var5 = var3.length();
- var7 = 1;
- var8 = 1;
- }
- } else {
- var6 = parseIntField(var3, var5, var11);
- var5 = var11 + 1;
- var11 = var3.indexOf("-", var5);
- if (var11 == -1) {
- if (SchemaUtilities.flavorConvertsTo(var9) == "xsd") {
- var7 = parseIntField(var3, var5, var5 + 2);
- var5 += 2;
- var8 = 1;
- }
- } else {
- var7 = parseIntField(var3, var5, var5 + 2);
- if (var11 != var5 + 2) {
- String var20 = "invalid date";
- return var20;
- }
-
- var5 += 3;
- var8 = parseIntField(var3, var5, var5 + 2);
- var5 += 2;
- }
- }
-
- if (var6 == -1 || var7 == -1 || var8 == -1 || var3.length() != var5) {
- String var12 = "invalid date";
- return var12;
- }
-
- if (var16) {
- var6 = -var6;
- }
- } else {
- var6 = parseIntField(var3, 0, 4);
- var7 = parseIntField(var3, 4, 6);
- var8 = parseIntField(var3, 6, 8);
- if (var6 == -1 || var7 == -1 || var8 == -1 || var3.length() != 8) {
- String var15 = "invalid date";
- return var15;
- }
- }
-
- ((Calendar)var4).set(1, var6);
- ((Calendar)var4).set(2, var7 - 1);
- ((Calendar)var4).set(5, var8);
- ((Calendar)var4).getTime();
- Object var17 = null;
- return (String)var17;
- } catch (Exception var13) {
- String var10 = "invalid date";
- return var10;
- }
- }
-
- protected String parseTime(SchemaIntf var1, DataType var2, String var3, GregorianCalendar var4) {
- String var5 = LeafValidator.getRootTypeName(var1, var2);
- int var22 = 0;
- int var7 = 0;
- int var8 = 0;
- int var9 = 0;
- int var10 = 0;
- int var11 = 0;
- int var12 = 0;
- boolean var13 = false;
-
- try {
- String var14 = var1.getFlavorName();
- if (var3.startsWith("-", var22) && SchemaUtilities.flavorConvertsTo(var14) != SchemaIntf.SOX2_FLAVOR_NAME) {
- ++var22;
- if (var3.startsWith("-", var22)) {
- ++var22;
- } else {
- var8 = parseIntField(var3, var22, var22 + 2);
- var22 += 2;
- if (var3.charAt(var22) != ':') {
- String var34 = "invalid time";
- return var34;
- }
-
- ++var22;
- }
- } else {
- var7 = parseIntField(var3, var22, var22 + 2);
- var22 += 2;
- if (var3.charAt(var22) != ':') {
- String var32 = "invalid time";
- return var32;
- }
-
- ++var22;
- var8 = parseIntField(var3, var22, var22 + 2);
- var22 += 2;
- if (var3.charAt(var22) != ':') {
- String var31 = "invalid time";
- return var31;
- }
-
- ++var22;
- }
-
- var9 = parseIntField(var3, var22, var22 + 2);
- var22 += 2;
- boolean var33 = SchemaUtilities.flavorConvertsTo(var14) != SchemaIntf.SOX2_FLAVOR_NAME;
- if (var3.startsWith(".", var22) && var33) {
- ++var22;
- int var16 = 9;
- int var17 = 0;
- var10 = 0;
- if (SchemaUtilities.flavorConvertsTo(var14) != "xsd") {
- var16 = Integer.MAX_VALUE;
- }
-
- while(var22 < var3.length() && var17 < var16 && Character.isDigit(var3.charAt(var22))) {
- if (var17 < 9) {
- var10 = var10 * 10 + Character.digit(var3.charAt(var22), 10);
- }
-
- ++var22;
- ++var17;
- }
- }
-
- if (var7 != -1 && var8 != -1 && var9 != -1 && var10 != -1 && var7 <= 24 && (var7 != 24 || var8 == 0 && var9 == 0 && var10 == 0)) {
- boolean var36 = var5 != null && (var5.equals(DataTypeIntf.DATETIMETZ) || var5.equals(DataTypeIntf.TIMETZ));
- if (var3.length() > var22 && var36) {
- if (var3.charAt(var22) == 'Z') {
- ++var22;
- } else {
- if (var3.charAt(var22) == '-') {
- var13 = true;
- } else if (var3.charAt(var22) != '+') {
- String var41 = "invalid time";
- return var41;
- }
-
- ++var22;
- var11 = parseIntField(var3, var22, var22 + 2);
- var22 += 2;
- if (var3.charAt(var22) != ':') {
- String var40 = "invalid time";
- return var40;
- }
-
- ++var22;
- var12 = parseIntField(var3, var22, var22 + 2);
- var22 += 2;
- if (var11 == -1 || var12 == -1) {
- String var39 = "invalid time";
- return var39;
- }
- }
- }
-
- if (var3.length() != var22) {
- String var38 = "invalid time";
- return var38;
- } else {
- ((Calendar)var4).set(11, var7);
- ((Calendar)var4).set(12, var8);
- ((Calendar)var4).set(13, var9);
- ((Calendar)var4).set(14, var10 / 1000000);
- int var37 = (var11 * 60 + var12) * 60 * 1000;
- if (var13) {
- var37 = -var37;
- }
-
- ((Calendar)var4).set(15, var37);
- Object var18 = null;
- return (String)var18;
- }
- } else {
- String var35 = "invalid time";
- return var35;
- }
- } catch (Exception var19) {
- String var15 = "invalid time";
- return var15;
- }
- }
-
- protected String applyDateTimeFacets(SchemaIntf var1, DataType var2, GregorianCalendar var3) {
- GregorianCalendar var4 = new GregorianCalendar();
- Facet var7 = var2.getFacet(Facet.FACET_ENUM_NAME);
- Vector var8 = var7 == null ? null : (Vector)var7.getValue();
- if (var8 != null) {
- int var9 = -1;
-
- for(int var10 = 0; var10 < var8.size(); ++var10) {
- String var6 = (String)var8.elementAt(var10);
- String var5 = this.parseDateTimeValue(var1, var2, var6, var4);
- if (var5 != null) {
- return String.valueOf("bad enumeration value: ").concat(String.valueOf(var5));
- }
-
- if (var3.equals(var4)) {
- var9 = var10;
- }
- }
-
- if (var9 == -1) {
- return "data does not match enumeration facet";
- }
- }
-
- var7 = var2.getFacet(Facet.FACET_MINEX_NAME);
- boolean var20 = var7 != null && ((String)var7.getValue()).equals("true");
- var7 = var2.getFacet(Facet.FACET_MIN_NAME);
- String var14 = var7 == null ? null : (String)var7.getValue();
- if (var14 != null) {
- String var12 = this.parseDateTimeValue(var1, var2, var14, var4);
- if (var12 != null) {
- return String.valueOf("bad min value: ").concat(String.valueOf(var12));
- }
-
- if (var20) {
- if (!var3.after(((Calendar)var4).getTime())) {
- return String.valueOf(String.valueOf("data must be greater than \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
- }
-
- if (var3.before(((Calendar)var4).getTime())) {
- return String.valueOf(String.valueOf("data must be greater than or equal to \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
- }
- }
- }
-
- var7 = var2.getFacet(Facet.FACET_MAXEX_NAME);
- boolean var21 = var7 != null && ((String)var7.getValue()).equals("true");
- var7 = var2.getFacet(Facet.FACET_MAX_NAME);
- var14 = var7 == null ? null : (String)var7.getValue();
- if (var14 != null) {
- String var13 = this.parseDateTimeValue(var1, var2, var14, var4);
- if (var13 != null) {
- return String.valueOf("bad max value: ").concat(String.valueOf(var13));
- }
-
- if (var21) {
- if (!var3.before(((Calendar)var4).getTime())) {
- return String.valueOf(String.valueOf("data must be less than \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
- }
-
- if (var3.after(((Calendar)var4).getTime())) {
- return String.valueOf(String.valueOf("data must be less than or equal to \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
- }
- }
- }
-
- DataType var11 = LeafValidator.getParentDataType(var1, var2);
- return var11 != null ? this.applyDateTimeFacets(var1, var11, var3) : null;
- }
-
- protected String parseDateTimeValue(SchemaIntf var1, DataType var2, String var3, GregorianCalendar var4) {
- ((Calendar)var4).clear();
- ((Calendar)var4).setLenient(false);
- ((Calendar)var4).set(15, 0);
- String var5 = LeafValidator.getRootTypeName(var1, var2);
- String var6 = null;
- if (!var5.equals(DataTypeIntf.DATETIMETZ) && !var5.equals(DataTypeIntf.DATETIME) && !var5.equals(DataTypeIntf.INTERVAL)) {
- if (!var5.equals(DataTypeIntf.TIMETZ) && !var5.equals(DataTypeIntf.TIME)) {
- if (var5.equals(DataTypeIntf.DATE)) {
- var6 = this.parseDate(var1, var2, var3, var4);
- }
- } else {
- var6 = this.parseTime(var1, var2, var3, var4);
- }
- } else {
- int var7 = var3.indexOf("T");
- if (var7 == -1) {
- return "invalid date time";
- }
-
- String var8 = var3.substring(0, var7);
- String var9 = var3.substring(var7 + 1);
- var6 = this.parseDate(var1, var2, var8, var4);
- if (var6 == null) {
- var6 = this.parseTime(var1, var2, var9, var4);
- }
- }
-
- return var6;
- }
-
- String validate(SchemaIntf var1, DataType var2, String var3) {
- GregorianCalendar var4 = new GregorianCalendar();
- String var5 = this.parseDateTimeValue(var1, var2, var3, var4);
- if (var5 == null) {
- var5 = this.applyDateTimeFacets(var1, var2, var4);
- }
-
- if (var5 == null) {
- var5 = ((DataValidator)this).applyLexicalFacets(var1, var2, var3);
- }
-
- return var5;
- }
- }
-